{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cv2\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 画图解释图像卷积滤波的基本原理，并进一步简述常见的图像平滑滤波算法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如下图，一个5* 5像素的图片，和一个3* 3像素的滤波做卷积滤波：\n",
    "滤波=[ [1,0,1],\n",
    "       [0,1,0],\n",
    "       [1,0,1] ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "img = cv2.imread(\"convolve.png\")\n",
    "lenna_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)\n",
    "plt.imshow(lenna_img)\n",
    "plt.axis(\"off\")#去除坐标轴\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 从上图可以看出，原图像5* 5像素通过一个3* 3像素的卷积滤波之后，最后变成了一个3* 3的新图像。其中新图像第一个元素4是这样计算的：\n",
    "$$ (1* 1)+(1* 0)+(1* 1)+(0* 0)+(1* 1)+(1* 0)+(0* 1)+(0* 0)+(1* 1) = 4 $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 常见的图像平滑滤波：平均滤波 ，加权平均滤波(高斯滤波)，中值滤波 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 简述边缘检测的基本原理，以及Sobel、LoG和Canny算子的原理差异。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 边缘检测的本质是微分，具体解释如下图，"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "img = cv2.imread(\"edge.png\")\n",
    "lenna_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)\n",
    "plt.imshow(lenna_img)\n",
    "plt.axis(\"off\")#去除坐标轴\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 左上图代表原始图片灰度梯度变化情况。\n",
    "#### 右上图代表对原始图像的一阶微分，可以看出图中极值顶点处是原始图片灰度突变的地方，因此该点可以视为原始图片的边缘处。\n",
    "#### 正下方图代表对原始图像的二阶微分，由极值定理可以得到，0点处，就是一阶微分的极值顶点，因此该点可以视为原始图片的边缘处。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 实际中，图片是二维的，我们通常对它进行处理差分，也就是x方向和y方向的偏微分 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sobel、LoG和Canny算子的原理差异：\n",
    "#### Sobel算子属于一阶微分算子，对灰度渐变低噪声的图像有较好的检测效果，但是对于混合多复杂噪声的图像，处理效果就不理想了。\n",
    "#### LoG算子属于二阶微分算子，在边缘定位精度和消除噪声级间存在着矛盾。\n",
    "#### Canny算子会先使用一阶高斯导数，同时进行平滑图像和计算微分，再计算梯度并非极大值抑制。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 简述图像灰度直方图的基本概念，及使用大津算法进行图像分割的基本原理。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 灰度直方图的基本概念：\n",
    "#### 灰度直方图是图像中灰度分布统计图，X轴表示从0-255不同灰度取值，Y轴表示图片中对应不同灰度值出现的次数或者概率。\n",
    "#### (很好理解，就是我们做数据特征分析时候，分析图片灰度分布情况的直方图)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 大津算法的基本概念："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 大津算法是一种图像二值化分割阈值的算法。通过确定最佳阈值，使背景和目标之间的类间方差最大 (因为二者差异最大)。由于大津算法是基于整体图片，所以当图片中目标和背景的灰度值近似的时候，大津算法的性能就不太理想。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 简述Harris算子对角点的定义，进行角点检测的基本原理，并说明引入角点响应函数的意义。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Harris算子对角点的定义：对矩形窗口内像素灰度积分，沿着任意方向移动，都会发生剧烈变化，这样一片区域称为角点。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 角点检测的基本原理："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1.由定义构建数学模型，将图像窗口平移[u,v]产生灰度变化 E(u,v):\n",
    "$$ E(u,v) = \\sum_{x,y}w(x,y)[I(x+u,y+v) - I(x,y)]^2 $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 其中w(x,y)是窗口函数，I(x,y)是灰度图像积分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.通过泰勒展开和矩阵变化，可以推导出 E(u,v) 近似等于下面的表达式:\n",
    "$$ E(u,v) \\approx \\left[ \\begin{array} {cccc} u&v \\end{array} \\right] M \\left[ \\begin{array} {cccc} u \\\\ v \\end{array} \\right]$$\n",
    "#### 其中M等于下面的等式：\n",
    "$$  M = \\sum_{x,y}w(x,y) \\left[ \\begin{array} {cccc} I_x^2&I_xI_y \\\\ I_xI_y&I_y^2 \\end{array} \\right] $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.注意E是一个二次型:\n",
    "$$ E = \\left[ \\begin{array} {cccc} u&v \\end{array} \\right] \\left[ \\begin{array} {cccc} A&C \\\\ C&B \\end{array} \\right] \\left[ \\begin{array} {cccc} u \\\\ v \\end{array} \\right] = Au^2 + Bv^2 + 2Cuv $$\n",
    "$$ 上面式子近似看成一个椭圆表达式，2Cuv为椭圆偏移量，因此得到标准椭圆表达式 $$\n",
    "$$ \\cfrac{u^2}{a^2} + \\cfrac{v^2}{b^2} = 1 $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4. 由椭圆表达式得到a, b是椭圆的长短轴,对应矩阵M的两个特征值λ1,λ2: \n",
    "$$ 当 λ_1和λ_2 都比较小时，点(x,y)处于灰度变化平缓区域 $$\n",
    "$$ 当 λ_1>>λ_2 或者 λ_1<<λ_2 时，点(x,y)处于边界像素 $$\n",
    "$$ 当 λ_1和λ_2 都比较大，而且近似相等的时候，点(x,y)为角点 $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 由上述推论引出角点响应函数：\n",
    "$$ R = detM - k(traceM)^2 $$\n",
    "\n",
    "$$ 其中  traceM = \\lambda_1+\\lambda_2 $$ $$ detM = \\lambda_1\\lambda_2 $$\n",
    "#### 当R接近于零时，处于灰度变化平缓区域;\n",
    "#### 当R<0时，点为边界像素;\n",
    "#### 当R>0时，点为角点。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 简述Hough变换的基本原理(包括参数空间变换及参数空间划分网格统计)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Hough变换的基本原理是：运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值，从而把检测任意形状的问题转化为统计峰值问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 参数空间变换：类似与直角坐标系到极坐标系的转换。直角坐标系的一点(x,y)，必定有无数条直线 (y = kx + b) 会经过该点(x,y)，这个时候我们把所有的(k,b)集合以k为x轴，以b为y轴，画出来无限多个点(连成线)。但是在实际应用中，y=kx+b形式的直线方程没有办法表示x=c形式的直线(这时候，直线的斜率为无穷大)，所以在实际应用中，我们自然而然的想到了，将每一对(k,b)对应到极坐标系下(r,θ)的参数空间变化：r = xcos(θ) + ysin(θ). 对于同一条直线上面的多个点 A(x1,y1), B(x2,y2), C(x3,y3) ，他们有着相同的(k, b)，所以对应的在极坐标系参数空间下也必定会相交与一个点。从而把检测是否为直线的问题转化为统计峰值问题，后续推广到检测任意形状。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 参数空间划分网格统计：在参数空间转换成(r,θ)后，将(r,θ)空间量化成许多小格，根据x-y平面每一个直线点代入θ的量化值 ，算出各个ρ，将对应格计数累加。当全部点变换后，对小格进行检验。设置 累计阈值T，计数器大于T的小格对应于共 线点，其可以用作直线拟合参数。小于T 的反映非共线点，丢弃不用 。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. 简述SIFT原理(重点是尺度空间和方向直方图原理)及ORB算子原理(重点是FAST和BRIEF)。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### SIFT定义: 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征，它在空间尺度中寻找极值点，并提取出其位置、尺度、旋转不变量。它主要包括：尺度空间极值检测，关键点定位，特征方向赋值，关键点特征描述四个步骤。下面简述一下三个步骤的相关理论。\n",
    "#### 1.尺度空间极值检测:当一个物体由近到远，人视觉效果看起来大小不一，但是人眼可自动调节尺度，完成对同一个物体的检测和识别。同样的在机器处理图像信息模型中引入一个被视为尺度的参数，通过连续化尺度参数获得多尺度下的尺度空间表示序列，对这些序列进行尺度空间主轮廓的提取，并以该主轮廓作为一种特征向量，实现边缘、角点检测和不同分辨率上的特征提取等。从而模拟人在距离目标由近到远时目标在视网膜上的形成过程。尺度空间的核心思想是通过不同分辨率看同一个图像，可通过不同尺度的高斯凼数与原始图像卷积可以实现。极大值点的精确定位可通过解含有二阶导数项的方程得到。 \n",
    "#### 2. 关键点定位：步骤1中检测到的极值点是离散空间的极值点，之后可以通过拟合三维二次凼数来精确确定关键点的位 置和尺度，同时去除低对比度的关键点和丌稳定的边缘响应点(因为DoG算子会产生较强的边缘响应)， 以增强匹配稳定性、提高抗噪声能力。 \n",
    "#### 3.特征方向赋值：对于尺度和位置，步骤一和二有相关描述。对于特征方向，最常使用的是方向直方图。要了解方向直方图，首选要了解邻域窗口梯度，利用图像的局部特征为给每一个关键点分配一个基准方向，梯度的模值和斱向如下： \n",
    "$$ m(x,y) = \\sqrt[2]{(L(x+1,y) - L(x-1,y))^2 + (L(x,y+1) - L(x,y-1))^2}$$\n",
    "$$ θ(x,y) = \\cfrac{1}{tan((L(x,y+1) - L(x,y-1))/(L(x+1,y) - L(x-1,y)))}$$\n",
    "#### 直方图统计半径为3×1.5σ。即计算以关键点为中心半径3×1.5σ邻域内所有点的梯度方向。梯度直方图将0~360度的斱向范围分为36个柱。累计落到每个方向内的关键点个数加权值，以此生成梯度方向直方图。将梯度方向直方图中纵坐标最大的项代表的方向分配给当前关键点作为主方向，若在梯度直方图中存在一 个相当于主峰值80%能量的峰值，则将这个斱向认为是关键点的辅方向。辅方向的设计可以增强匹配的鲁棒性，Lowe指出，大概有15%的关键点具有辅方向，而恰恰是这15%的关键点对稳定匹配起到关键作用。 \n",
    "#### 4.关键点特征描述：对于每一个关键点，拥有三个信息：位置、尺度以及方向。接下来就是为每个关键点建立一个描述符，用 一组向量将这个关键点描述出来，使其不随各种发化而改发，比如光照发化、视角发化等等。这个描述子 不但包括关键点，也包含关键点周围对其有贡献的像素点，幵且描述符应该有较高的独特性，以便于提高 特征点正确匹配的概率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### ORB（Oriented FAST and Rotated BRIEF）是一种快速特征点提取和描述的算法。 ORB算法分为两部分，分别是特征点提取和特征点描述。特征提取是由FAST（Features from  Accelerated Segment Test）算法发展来的，特征点描述是根据BRIEF（Binary Robust Independent Elementary Features）特征描述算法改进的。下面主要介绍oFast和BRIEF的实现原理。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### oFast：\n",
    "#### 首先进行粗提取：从图像中选取一点P，以P为圆心画一个半径为3像素的圆。圆周上如果有连续N个像素 点的灰度值比P点的灰度值大戒小，则认为P为特征点。\n",
    "#### 然后筛选最优特征点：使用ID3算法训练一个决策树，将特征点圆周上的16个像素输入决策树中，以此来筛选出最优的FAST特征点。\n",
    "#### 接着使用非极大值抑制算法去除临近位置多个特征点 ：以特征点p为中心的一个邻域（如3x3戒5x5）内，计算每个特征点的s值(像素点与周围16个像素点差值的绝对值之和)，若p是邻域所有特征点中响应值最大的，则保留；否则，抑制。\n",
    "#### 再然后建立金字塔以实现特征点多尺度不变性:设置一个比例因子scaleFactor和金字塔的层数nlevels,将原图像按比例因子缩小成nlevels幅图像,将这nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点\n",
    "#### 最后使用矩法来确定FAST特征点的方向，保持特征点的旋转不变性：通过 矩来计算特征点以r为半径范围内的质心，特征点坐标到质心形成一个向量作为该特征点的斱向。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### BRIEF：BRIEF算法计算出来的是一个二进制串的特征描述符。\n",
    "#### 它是在一个特征点的邻域内，选择n对像素点(p(i),q(i))。比较每个点对的灰度值的大小，如果 I(p(i))> I(q(i))，则生成二进制串中的1，否则为0。所有的点对都进行比较，则生成长度为n的二进制串。一般n取128、256或512。\n",
    "\n",
    "#### 具体描述如下：\n",
    "#### 1.以关键点P为圆心，以d为半径做圆O。 \n",
    "#### 2.在圆O内某一模式选取N个点对。实验选择N=4，实际应用中N可以取512.假设当前选取的4个点：\n",
    "$$ P_1(A,B), P_2(A,B), P_3(A,B), P_4(A,B) $$\n",
    "#### 3.定义操作T\n",
    "$$\n",
    "T(P(A,B))=\n",
    "\\begin{cases}\n",
    "1,&I_A > I_B \\\\ \n",
    "0,&I_A \\leq I_B\n",
    "\\end{cases}     其中I_A表示A点的灰度\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.分别对已选取的点对进行T操作，将得到的结果进行组合：\n",
    "$$ T(P_1(A,B)) = 1 $$\n",
    "$$ T(P_2(A,B)) = 0 $$\n",
    "$$ T(P_3(A,B)) = 1 $$\n",
    "$$ T(P_4(A,B)) = 1 $$\n",
    "#### 则最终的描述为:1011"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### BRIEF优缺点：在旋转不是非常厉害的图像里，用BRIEF生成的描述子的匹配质量非常高，耗时也少。但在旋转大于 30°后，BRIEF的匹配率快速降到0左右，所以在后来改进过程中，加入旋转因子从而改进BRIEF算法，成为rBRIEF算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
